/**
 * 
 */
package protectora;

import java.util.LinkedList;
import java.util.List;

/**
 * @author roberto
 *
 */
public class Protectora {

	//Atributos
	
	private int numeroAnimales;
	//Conjunto de caja de acogidas que tiene la protectora
	private List casaAcogida;
	//Conjunto de animales que tiene la protectora sin adoptar
	private List animales;
	
	private String direccion;
	
	private String provincia;
	
	private String localidad;
	//Conjunto de voluntarios de la protectora
	private List voluntarios;
	
	//Constructores
	/**
	 * @param direccion
	 * @param provincia
	 * @param localidad
	 */
	public Protectora(String direccion, String provincia, String localidad) {
		super();
		this.direccion = direccion;
		this.provincia = provincia;
		this.localidad = localidad;
		this.animales = new LinkedList();
		this.voluntarios = new LinkedList();
		this.casaAcogida = new LinkedList();
	}

	/**
	 * @param numeroAnimales
	 * @param casaAcogida
	 * @param animales
	 * @param direccion
	 * @param provincia
	 * @param localidad
	 * @param voluntarios
	 */
	public Protectora(int numeroAnimales, List casaAcogida, List animales,
			String direccion, String provincia, String localidad,
			List voluntarios) {
		super();
		this.numeroAnimales = numeroAnimales;
		this.casaAcogida = casaAcogida;
		this.animales = animales;
		this.direccion = direccion;
		this.provincia = provincia;
		this.localidad = localidad;
		this.voluntarios = voluntarios;
	}

	public int getNumeroAnimales() {
		return numeroAnimales;
	}

	public void setNumeroAnimales(int numeroAnimales) {
		this.numeroAnimales = numeroAnimales;
	}

	public List getCasaAcogida() {
		return casaAcogida;
	}

	public void setCasaAcogida(List casaAcogida) {
		this.casaAcogida = casaAcogida;
	}

	public List getAnimales() {
		return animales;
	}

	public void setAnimales(List animales) {
		this.animales = animales;
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public String getProvincia() {
		return provincia;
	}

	public void setProvincia(String provincia) {
		this.provincia = provincia;
	}

	public String getLocalidad() {
		return localidad;
	}

	public void setLocalidad(String localidad) {
		this.localidad = localidad;
	}

	public List getVoluntarios() {
		return voluntarios;
	}

	public void setVoluntarios(List voluntarios) {
		this.voluntarios = voluntarios;
	}
	
	//Métodos
	
	/*Añadir animal a la protectora, se le pasa un animal y lo añade a la lista animal de la protectora*/
	
	public boolean addAnimal (Animales an){
		boolean resul= false;
		if (an==null){
			throw new NullPointerException("Variable recibida es null");
		}
		if (! (an instanceof Animales )){
			throw new NoClassDefFoundError("Variable de entrada tiene que ser de tipo Animales");
		}
		resul = this.animales.add(an);
		if (resul){
			this.numeroAnimales++;
		}
		return resul;
	}
	
	/* Eliminar animal, se hara cuando un animal sea adoptado y por tanto no sigua en la
	 * protectora */
	
	public boolean removeAnimal (Animales an){
		boolean resul = false;
		if (an==null){
			throw new NullPointerException("Variable recibida es null");
		}
		if (! (an instanceof Animales )){
			throw new NoClassDefFoundError("Variable de entrada tiene que ser de tipo Animales");
		}
		resul = this.animales.remove(an);
		if(resul)
			this.numeroAnimales--;
		return resul;
	}
	
	/*Añadir voluntario, se hara cuando haya un nuevo voluntario que quiera cooperar en la
	 * protectora*/
	
	public boolean addVoluntario (Voluntario vn){
		if (vn==null){
			throw new NullPointerException("Variable recibida es null");
		}
		if (! (vn instanceof Voluntario )){
			throw new NoClassDefFoundError("Variable de entrada tiene que ser de tipo Voluntario");
		}
		return (this.voluntarios.add(vn));
	}
	
	/*Eliminar voluntario, se hara cuando un voluntario deje de cooperar con la protectora*/
	
	public boolean removeVoluntario (Voluntario vn){
		if (vn==null){
			throw new NullPointerException("Variable recibida es null");
		}
		if (! (vn instanceof Voluntario )){
			throw new NoClassDefFoundError("Variable de entrada tiene que ser de tipo Voluntario");
		}
		return (this.animales.remove(vn));
	}
	
	/*Añadir casa de acogida */
	
	public boolean addCasaDeAcogida (CasaDeAcogida ca){
		if (ca==null){
			throw new NullPointerException("Variable recibida es null");
		}
		if (! (ca instanceof CasaDeAcogida )){
			throw new NoClassDefFoundError("Variable de entrada tiene que ser de tipo CasaDeAcogida");
		}
		return (this.voluntarios.add(ca));
	}
	
	/*Eliminar casa de acogida*/
	
	public boolean removeCasaDeAcogida (CasaDeAcogida ca){
		if (ca==null){
			throw new NullPointerException("Variable recibida es null");
		}
		if (! (ca instanceof CasaDeAcogida )){
			throw new NoClassDefFoundError("Variable de entrada tiene que ser de tipo CasaDeAcogida");
		}
		return (this.animales.remove(ca));
	}
}
